package core.collection.mycollection;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

/**
 * 总结
 *
 * @author
 * @create 2018-12-23 21:01
 **/
public class mycollection_10_Collections_Collections {
    /**
     * Collection
     * 		List(存取有序,有索引,可以重复)
     * 			ArrayList
     * 				底层是数组实现的,线程不安全,查找和修改快,增和删比较慢
     * 			LinkedList
     * 				底层是链表实现的,线程不安全,增和删比较快,查找和修改比较慢
     * 			Vector
     * 				底层是数组实现的,线程安全的,无论增删改查都慢
     * 			如果查找和修改多,用ArrayList
     * 			如果增和删多,用LinkedList
     * 			如果都多,用ArrayList
     * 		Set(存取无序,无索引,不可以重复)
     * 			HashSet
     * 				底层是哈希算法实现
     * 				LinkedHashSet
     * 					底层是链表实现,但是也是可以保证元素唯一,和HashSet原理一样
     * 			TreeSet
     * 				底层是二叉树算法实现
     * 			一般在开发的时候不需要对存储的元素排序,所以在开发的时候大多用HashSet,HashSet的效率比较高
     * 			TreeSet在面试的时候比较多,问你有几种排序方式,和几种排序方式的区别
     * 		        自然比较（内部比较器）
     * 		            一般用在一个需要实现自身比较的类
     * 		            在类中实现comparable接口，重写comparable的compareTo方法
     * 		        比较器比较（外部比较器）
     * 		            一般用于定义一个比较规则，可以定义多个比较规则多个类（分别实现comparator接口），在需要的使用采用不同的比较规则
     * 		            在方法参数列表中传入一个比较器，或者new一个比较器实现类
     * 		    https://www.cnblogs.com/szlbm/p/5504634.html
     * Map
     * 		HashMap
     * 			底层是哈希算法,针对键
     * 			LinkedHashMap
     * 				底层是链表,针对键
     * 		TreeMap
     * 			底层是二叉树算法,针对键
     * 		开发中用HashMap比较多
     */
    public static void main(String[] args) {
        Hashtable<String,Integer> ht = new Hashtable<>();
        ht.put("one",1);
        ht.put("two",2);
        ht.put("three",3);
        ht.put("four",4);
        ht.put("five",5);
        for(Map.Entry<String,Integer> en : ht.entrySet()){
            System.out.println(en.getKey()+"="+en.getValue());
        }
        System.out.println("============================");
        Map<String,Integer> map = new HashMap<>();
        map.put("one",1);
        map.put("two",2);
        map.put("three",3);
        map.put("four",4);
        map.put("five",5);
        for(Map.Entry<String,Integer> en : map.entrySet()){
            System.out.println(en.getKey()+"="+en.getValue());
        }
    }
}
